package com.stark.wechat.service.impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.stark.wechat.util.SysTools;
import com.stark.wechat.util.Tools;
import com.stark.wechat.util.WechatUtil;

/**
 * 微信凭证业务逻辑。
 * @author Ben
 * @since 1.0.0
 * @version 1.0.0, 2017/8/6
 */
@Service("ticketService")
public class TicketServiceImpl {
	/**
	 * 生成 JS-SDK 签名。
	 * @param url 调用 JS 接口页面的完整 URL ，不包含 # 及其后面部分。
	 * @return {@link HashMap} ，包含： (String) noncestr ， (String) jsapiTicket ， (long) timestamp ， (String) signature ， (String) appId 。
	 * @throws Exception 请求失败时抛出异常。
	 */
	public Map<String, Object> createJsSdkSignature(String url) throws Exception {
		// 取UUID作为随机字符串
		String noncestr = Tools.getUUID();
		// 先从缓存中读取jsapi_ticket，缓存中没有向微信请求
		String jsapiTicket = SysTools.getJsapiTicket();
		// 时间戳
		long timestamp = System.currentTimeMillis() / 1000;
		// 生成JS-SDK签名
		String signature = WechatUtil.createJsSdkSignature(noncestr, jsapiTicket, timestamp, url);
		
		Map<String, Object> map = new HashMap<>();
		map.put("noncestr", noncestr);
		map.put("jsapiTicket", jsapiTicket);
		map.put("timestamp", timestamp);
		map.put("signature", signature);
		map.put("appId", SysTools.getAppId());
		return map;
	}
}
